死锁的概念
- 死锁的定义
多个进程因为竞争资源和造成的一种相互等待的现象 - 死锁产生原因
- 系统资源竞争
- 进程推进顺序非法
- 死锁产生的必要条件
- 互斥条件
- 不剥夺条件
- 请求和饱和条件
- 循环等待条件
死锁的处理策略
- 预防死锁:破坏死锁产生的四个必要条件中的一个或多个
- 避免死锁:防止系统进入不安全状态
- 死锁检测和解除:不采取限制,检测到再解除
死锁避免
- 系统安全状态
系统按照某种进程推进顺序(P1,P2,…,Pn),为每个进程Pi分配其所需资源,直到满足每个进程的最大资源需求,使每个进程都可以顺利完成,此时称P1,P2,…,Pn为安全序列,如果系统无法找到一个安全序列,则称系统处于不安全状态。 - 银行家算法
银行家算法是最著名的死锁避免算法。- 数据结构描述
- 可利用资源矢量Available:Available[i]=K表示系统现有Ri类资源K个
- 最大需求矩阵Max:Max[i,j]=K,表示进程i需要Rj类资源的最大数目为K
- 分配矩阵Allocation:Allocation[i,j]=K ,表示进程i已经分配到了Rj类资源数目为K
- 需求矩阵Need:Need[i,j]=K,表示进程i还需要Rj类资源数目为K
- 算法描述
- 安全性算法
- 数据结构描述
死锁检测和解除
- 资源分配图
请求边,分配边 死锁定理
S为死锁的条件是当且仅当S状态的资源分配图是不可完全化简的。
资源分配图化简:死锁解除
- 资源剥夺法
- 撤销进程法
- 进程回退法